home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 February / Gamestar_81_2006-02_dvd.iso / Red Shark / Common / Effects.script < prev    next >
Text File  |  2001-12-04  |  35KB  |  1,163 lines

  1. //-------------------------------------------------------------------
  2. //
  3. //  This code is copyright 2001 by G5 Software.
  4. //  Any unauthorized usage, either in part or in whole of this code
  5. //  is strictly prohibited. Violators WILL be prosecuted to the
  6. //  maximum extent allowed by law.
  7. //
  8. //-------------------------------------------------------------------
  9.  
  10.  
  11. class CHelicopterRotorEffect
  12. {
  13.   final static string CID = "StaticEffect";
  14.  
  15.   void CHelicopterRotorEffect()
  16.   {
  17.     CreateParticle(
  18.         EPPID_STATIC_PLANE_XY,
  19.         vector(0.0, 0.0, 0.0),
  20.         vector(6.0, 6.0, 6.0),
  21.         5,
  22.         color(1.0, 1.0, 1.0, 0.8),
  23.         vector(1.0, 1.0, 1.0)
  24.       );
  25.   }
  26. }
  27.  
  28. // helper classes
  29. class CSingleParticleAnimator
  30. {
  31.   int   m_AnimFramesQty = 64;
  32.   float m_SizeFactor    = 1.0;
  33.  
  34.   float m_SizePower     = 0.75;
  35.   float m_PlacePower    = 1.0;
  36.   color m_BaseColor     = color(1.0, 1.0, 1.0, 1.0);
  37.  
  38.   void GenerateParticleAnimation(
  39.       int    _Particle,
  40.       int    _StartFrame,
  41.       vector _StartPlace,
  42.       vector _FinalPlace,
  43.       vector _BaseSize,
  44.       int    _MaterialBase,
  45.       float  _TimeScale
  46.     )
  47.   {
  48.     SetPattern(_Particle, _StartFrame, _StartFrame + m_AnimFramesQty * _TimeScale, EPPID_BILLBOARD_PLANE);
  49.     SetColor(_Particle, m_BaseColor);
  50.  
  51.     for (int FrameNum = 0; FrameNum < m_AnimFramesQty * _TimeScale; FrameNum = FrameNum + 1)
  52.     {
  53.       float Phase = float(FrameNum) / float(m_AnimFramesQty * _TimeScale - 1);
  54.       SetMaterial(_Particle, _StartFrame + FrameNum, _MaterialBase + (m_AnimFramesQty - 1) * Phase);
  55.       SetPosition(_Particle, _StartFrame + FrameNum,
  56.         (_StartPlace + (_FinalPlace - _StartPlace) * pow(Phase, m_PlacePower)) * m_SizeFactor);
  57.       SetSizeFactor(_Particle, _StartFrame + FrameNum, _BaseSize * m_SizeFactor);
  58.     }
  59.  
  60.     // all other frames is NULL by default
  61.   }
  62.  
  63.   void GenerateParticleAnimation(
  64.       int    _Particle,
  65.       int    _StartFrame,
  66.       vector _StartPlace,
  67.       vector _FinalPlace,
  68.       vector _StartSize,
  69.       vector _FinalSize,
  70.       int    _MaterialBase,
  71.       float  _TimeScale
  72.     )
  73.   {
  74.     SetPattern(_Particle, _StartFrame, _StartFrame + m_AnimFramesQty * _TimeScale, EPPID_BILLBOARD_PLANE);
  75.     SetColor(_Particle, m_BaseColor);
  76.  
  77.     for (int FrameNum = 0; FrameNum < m_AnimFramesQty * _TimeScale; FrameNum = FrameNum + 1)
  78.     {
  79.       float Phase = float(FrameNum) / float(m_AnimFramesQty * _TimeScale - 1);
  80.       SetMaterial(_Particle, _StartFrame + FrameNum, _MaterialBase + (m_AnimFramesQty - 1) * Phase);
  81.       SetPosition(_Particle, _StartFrame + FrameNum,
  82.         (_StartPlace + (_FinalPlace - _StartPlace) * pow(Phase, m_PlacePower)) * m_SizeFactor);
  83.       SetSizeFactor(_Particle, _StartFrame + FrameNum,
  84.         (_StartSize + (_FinalSize - _StartSize) * pow(Phase, m_SizePower)) * m_SizeFactor);
  85.     }
  86.  
  87.     // all other frames is NULL by default
  88.   }
  89. }
  90.  
  91. class CFramesTableCreator
  92.   extends CSingleParticleAnimator
  93. {
  94.   float  m_SmokeHeight = 50.0;
  95.   vector m_BasePlace   = vector(0.0, 0.0, 0.0);
  96.   float  m_StartShift  = 0.0;
  97.   float  m_ShiftFactor = 0.2;
  98.  
  99.   void GenerateSmokeTable(
  100.       int _StartPlane,
  101.       int _FinalPlane
  102.     )
  103.   {
  104.     for (int Plane = _StartPlane; Plane < _FinalPlane; Plane = Plane + 1)
  105.     {
  106.       vector Direction = vector(rand(m_SmokeHeight * m_ShiftFactor), rand(m_SmokeHeight * m_ShiftFactor), 0.0);
  107.  
  108.       GenerateParticleAnimation(
  109.         Plane, 0,
  110.         m_BasePlace + Direction * m_StartShift,
  111.         m_BasePlace + Direction + vector(0.0, 0.0, m_SmokeHeight),
  112.         vector(2.0, 2.0, 4.0), vector(5.0, 5.0, 5.0),
  113.         300, 1.0);
  114.     }
  115.   }
  116.  
  117.   void GenerateWhiteSmokeTable(
  118.       int _StartPlane,
  119.       int _FinalPlane
  120.     )
  121.   {
  122.     for (int Plane = _StartPlane; Plane < _FinalPlane; Plane = Plane + 1)
  123.     {
  124.       vector Direction = vector(rand(m_SmokeHeight * m_ShiftFactor), rand(m_SmokeHeight * m_ShiftFactor), 0.0);
  125.  
  126.       GenerateParticleAnimation(
  127.         Plane, 0,
  128.         m_BasePlace + Direction * m_StartShift,
  129.         m_BasePlace + Direction + vector(0.0, 0.0, m_SmokeHeight),
  130.         vector(2.0, 2.0, 4.0), vector(5.0, 5.0, 5.0),
  131.         500, 1.0);
  132.     }
  133.   }
  134.  
  135.   void GenerateFireSmokeTable(
  136.       int _StartPlane,
  137.       int _FinalPlane
  138.     )
  139.   {
  140.     for (int Plane = _StartPlane; Plane < _FinalPlane; Plane = Plane + 1)
  141.     {
  142.       vector Direction = vector(rand(m_SmokeHeight * m_ShiftFactor), rand(m_SmokeHeight * m_ShiftFactor), 0.0);
  143.  
  144.       GenerateParticleAnimation(
  145.         Plane, 0,
  146.         m_BasePlace + Direction * m_StartShift,
  147.         m_BasePlace + Direction + vector(0.0, 0.0, m_SmokeHeight),
  148.         vector(2.0, 2.0, 4.0), vector(5.0, 5.0, 5.0),
  149.         400, 1.0);
  150.     }
  151.   }
  152.  
  153.   void GenerateFireTable(
  154.       int _StartPlane,
  155.       int _FinalPlane
  156.     )
  157.   {
  158.     for (int Plane = _StartPlane; Plane < _FinalPlane; Plane = Plane + 1)
  159.     {
  160.       GenerateParticleAnimation(
  161.         Plane, 0,
  162.         m_BasePlace, m_BasePlace + vector(rand(1.5), rand(1.5), rand(1.0, 2.0)),
  163.         vector(1.0, 1.0, 1.0), vector(1.0, 1.0, 1.0),
  164.         400, 1.0);
  165.     }
  166.   }
  167. }
  168.  
  169.  
  170.  
  171. // bullet trace effects
  172. class CBaseBulletTraceEffect
  173. {
  174.   final static string CID = "StaticEffect";
  175.  
  176.   void CBaseBulletTraceEffect(
  177.       color Color
  178.     )
  179.   {
  180.     CreateParticle(
  181.         EPPID_BILLBOARD_XAXIS,
  182.         vector(3.0, 0.0, 0.0),
  183.         vector(3.0, 0.1, 0.1),
  184.         0,
  185.         Color,
  186.         vector(1.0, 1.0, 1.0)
  187.       );
  188.   }
  189. }
  190.  
  191. class CRedBulletTraceEffect extends CBaseBulletTraceEffect
  192. {
  193.   void CRedBulletTraceEffect()
  194.   {
  195.     CBaseBulletTraceEffect(color(1.0, 0.3, 0.3, 1.0));
  196.   }
  197. }
  198.  
  199. class CGreenBulletTraceEffect extends CBaseBulletTraceEffect
  200. {
  201.   void CGreenBulletTraceEffect()
  202.   {
  203.     CBaseBulletTraceEffect(color(0.3, 1.0, 0.3, 1.0));
  204.   }
  205. }
  206.  
  207. class CBlueBulletTraceEffect extends CBaseBulletTraceEffect
  208. {
  209.   void CBlueBulletTraceEffect()
  210.   {
  211.     CBaseBulletTraceEffect(color(0.3, 0.3, 1.0, 1.0));
  212.   }
  213. }
  214.  
  215. class CYellowBulletTraceEffect extends CBaseBulletTraceEffect
  216. {
  217.   void CYellowBulletTraceEffect()
  218.   {
  219.     CBaseBulletTraceEffect(color(1.0, 1.0, 0.0, 1.0));
  220.   }
  221. }
  222.  
  223. class CMagentaBulletTraceEffect extends CBaseBulletTraceEffect
  224. {
  225.   void CMagentaBulletTraceEffect()
  226.   {
  227.     CBaseBulletTraceEffect(color(1.0, 0.5, 0.0, 1.0));
  228.   }
  229. }
  230.  
  231.  
  232.  
  233. // explosions
  234. class CTankGunBulletHitEffect
  235.   extends CSingleParticleAnimator
  236. {
  237.   final static string CID = "DynamicEffect";
  238.  
  239.   void CTankGunBulletHitEffect()
  240.   {
  241.     SetEffectDuration(2.0);
  242.     UseIdentityMatrix(true);
  243.     CreateFramesTable(2, 3 * m_AnimFramesQty);
  244.  
  245.     m_SizeFactor = 2.0;
  246.     m_BaseColor  = color(1.0, 1.0, 1.0, 0.75);
  247.  
  248.     GenerateParticleAnimation(0, 0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(1.5, 1.5, 1.5), 200, 1.0);
  249.     GenerateParticleAnimation(1, 0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 2.0), vector(0.5, 0.5, 2.0), vector(4.0, 4.0, 4.0), 400, 3.0);
  250.   }
  251. }
  252.  
  253. class CFlakGunBulletHitEffect
  254.   extends CSingleParticleAnimator
  255. {
  256.   final static string CID = "DynamicEffect";
  257.  
  258.   void CFlakGunBulletHitEffect()
  259.   {
  260.     SetEffectDuration(2.0);
  261.     UseIdentityMatrix(true);
  262.     CreateFramesTable(2, 3 * m_AnimFramesQty);
  263.  
  264.     m_SizeFactor = 1.0;
  265.     m_BaseColor  = color(1.0, 1.0, 1.0, 0.75);
  266.  
  267.     GenerateParticleAnimation(0, 0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(1.5, 1.5, 1.5), 200, 1.0);
  268.     GenerateParticleAnimation(1, 0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 2.0), vector(0.5, 0.5, 2.0), vector(4.0, 4.0, 4.0), 400, 3.0);
  269.   }
  270. }
  271.  
  272. class CMissileExplosionEffect
  273.   extends CSingleParticleAnimator
  274. {
  275.   final static string CID = "DynamicEffect";
  276.  
  277.   void CMissileExplosionEffect()
  278.   {
  279.     SetEffectDuration(2.5);
  280.     UseIdentityMatrix(true);
  281.     CreateFramesTable(2, m_AnimFramesQty *3 + 16);
  282.  
  283.     m_SizeFactor = 4.0;
  284.     GenerateParticleAnimation(0,  0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(2.0, 2.0, 2.0), vector(10.0, 10.0, 4.0), 200, 2.0);
  285.     GenerateParticleAnimation(1, 16, vector(0.0, 0.0, 0.5), vector(0.0, 0.0, 5.0), vector(0.5, 0.5, 2.0), vector(6.0, 6.0, 6.0), 400, 3.0);
  286.   }
  287. }
  288.  
  289. class CKatushaRocketExplosionEffect
  290.   extends CSingleParticleAnimator
  291. {
  292.   final static string CID = "DynamicEffect";
  293.  
  294.   void CKatushaRocketExplosionEffect()
  295.   {
  296.     SetEffectDuration(5.0);
  297.     UseIdentityMatrix(true);
  298.     CreateFramesTable(3, m_AnimFramesQty * 6 + 48);
  299.  
  300.     m_SizeFactor = 6.0;
  301.     GenerateParticleAnimation(0,  0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(2.0, 2.0, 2.0), vector(20.0, 20.0, 4.0), 200, 2.0);
  302.     GenerateParticleAnimation(1, 32, vector(0.0, 0.0, 1.5), vector(0.0, 0.0, 3.0), vector(1.0, 1.0, 6.0), vector(6.0,  6.0,  6.0), 400, 3.0);
  303.     GenerateParticleAnimation(2, 48, vector(0.0, 0.0, 3.0), vector(0.0, 0.0, 5.0), vector(6.0, 6.0, 6.0), vector(10.0, 10.0, 10.0), 300, 6.0);
  304.   }
  305. }
  306.  
  307. class CAirBombExplosionEffect
  308.   extends CSingleParticleAnimator
  309. {
  310.   final static string CID = "DynamicEffect";
  311.  
  312.   void CAirBombExplosionEffect()
  313.   {
  314.     SetEffectDuration(5.0);
  315.     UseIdentityMatrix(true);
  316.     CreateFramesTable(3, m_AnimFramesQty * 6 + 48);
  317.  
  318.     m_SizeFactor = 6.0;
  319.     GenerateParticleAnimation(0,  0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(2.0, 2.0, 2.0), vector(20.0, 20.0, 4.0), 200, 2.0);
  320.     GenerateParticleAnimation(1, 32, vector(0.0, 0.0, 1.5), vector(0.0, 0.0, 3.0), vector(1.0, 1.0, 6.0), vector(6.0,  6.0,  6.0), 400, 3.0);
  321.     GenerateParticleAnimation(2, 48, vector(0.0, 0.0, 3.0), vector(0.0, 0.0, 5.0), vector(6.0, 6.0, 6.0), vector(10.0, 10.0, 10.0), 300, 6.0);
  322.   }
  323. }
  324.  
  325. class CPanzerFaustExplosionEffect
  326.   extends CSingleParticleAnimator
  327. {
  328.   final static string CID = "DynamicEffect";
  329.  
  330.   void CPanzerFaustExplosionEffect()
  331.   {
  332.     SetEffectDuration(1.5);
  333.     UseIdentityMatrix(true);
  334.     CreateFramesTable(1, m_AnimFramesQty);
  335.  
  336.     m_SizeFactor = 1.0;
  337.     m_BaseColor  = color(1.0, 1.0, 1.0, 0.75);
  338.  
  339.     GenerateParticleAnimation(0, 0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(0.5, 0.5, 0.5), vector(4.0, 4.0, 4.0), 400, 1.0);
  340.   }
  341. }
  342.  
  343. class CHelicopterSmokeEffect
  344.   extends CFramesTableCreator
  345. {
  346.   final static string CID = "SampledEffect";
  347.  
  348.   void CHelicopterSmokeEffect()
  349.   {
  350.     SetEffectDuration(30.0);
  351.     UseIdentityMatrix(true);
  352.     CreateFramesTable(20, m_AnimFramesQty);
  353.  
  354.     m_BaseColor   = color(1.0, 1.0, 1.0, 1.0);
  355.     m_SizeFactor  = 7.0;
  356.     m_SmokeHeight = rand(30.0, 40.0);
  357.  
  358.     GenerateSmokeTable(0, 10);
  359.     GenerateFireTable(10, 20);
  360.  
  361.     for (float Time = 0.0; Time < 50.0; Time = Time + 1.0)
  362.     {
  363.       AddReference(rand_int(10), Time / 75.0, 0.25);
  364.       AddReference(10 + rand_int(10), Time / 75.0, 0.05);
  365.     }
  366.   }
  367. }
  368.  
  369. class CUnitExplosionEffect
  370.   extends CFramesTableCreator
  371. {
  372.   final static string CID = "SampledEffect";
  373.  
  374.   void CUnitExplosionEffect()
  375.   {
  376.     SetEffectDuration(15.0);
  377.     UseIdentityMatrix(true);
  378.     CreateFramesTable(20, m_AnimFramesQty);
  379.  
  380.     m_BaseColor   = color(1.0, 1.0, 1.0, 1.0);
  381.     m_SizeFactor  = 3.0;
  382.     m_SmokeHeight = rand(25.0, 35.0);
  383.  
  384.     GenerateSmokeTable(0, 10);
  385.     GenerateFireTable(10, 20);
  386.  
  387.     for (float Time = 0.0; Time < 25.0; Time = Time + 1.0)
  388.     {
  389.       AddReference(rand_int(10), Time / 50.0, 0.5);
  390.       AddReference(10 + rand_int(10), Time / 50.0, 0.1);
  391.     }
  392.   }
  393. }
  394.  
  395. class CItemExplosionEffect
  396.   extends CFramesTableCreator
  397. {
  398.   final static string CID = "SampledEffect";
  399.  
  400.   void CItemExplosionEffect()
  401.   {
  402.     SetEffectDuration(15.0);
  403.     UseIdentityMatrix(true);
  404.     CreateFramesTable(20, m_AnimFramesQty);
  405.  
  406.     m_BaseColor   = color(1.0, 1.0, 1.0, 1.0);
  407.     m_SizeFactor  = 3.0;
  408.     m_SmokeHeight = rand(25.0, 35.0);
  409.  
  410.     GenerateSmokeTable(0, 10);
  411.     GenerateFireTable(10, 20);
  412.  
  413.     for (float Time = 0.0; Time < 25.0; Time = Time + 1.0)
  414.     {
  415.       AddReference(rand_int(10), Time / 50.0, 0.5);
  416.       AddReference(10 + rand_int(10), Time / 50.0, 0.1);
  417.     }
  418.   }
  419. }
  420.  
  421. class CTreeExplosionEffect
  422.   extends CFramesTableCreator
  423. {
  424.   final static string CID = "SampledEffect";
  425.  
  426.   void CTreeExplosionEffect()
  427.   {
  428.     SetEffectDuration(10.0 + rand(2.5));
  429.     UseIdentityMatrix(true);
  430.     CreateFramesTable(20, m_AnimFramesQty);
  431.  
  432.     m_ShiftFactor = 0.2;
  433.  
  434.     m_SizeFactor  = 3.0;
  435.     m_StartShift  = 0.3;
  436.     m_BasePlace   = vector(0.0, 0.0, 5.0);
  437.     m_BaseColor   = color(1.0, 1.0, 1.0, 1.0);
  438.     m_SmokeHeight = rand(15.0, 20.0);
  439.     GenerateSmokeTable(0, 10);
  440.  
  441.     m_SizeFactor  = 2.0;
  442.     m_StartShift  = 0.0;
  443.     m_BasePlace   = vector(0.0, 0.0, 0.0);
  444.     m_BaseColor   = color(1.0, 1.0, 1.0, 0.5);
  445.     m_SmokeHeight = rand(7.5, 12.5);
  446.     GenerateFireSmokeTable(10, 20);
  447.  
  448.     for (float Time = 0.0; Time < 10.0; Time = Time + 1.0)
  449.     {
  450.       AddReference(rand_int(10), Time / 20.0, 0.5);
  451.       AddReference(10 + rand_int(10), Time / 30.0, 0.3);
  452.     }
  453.   }
  454. }
  455.  
  456. class CBuildingExplosionEffect
  457.   extends CFramesTableCreator
  458. {
  459.   final static string CID = "SampledEffect";
  460.  
  461.   void CBuildingExplosionEffect()
  462.   {
  463.     SetEffectDuration(30.0);
  464.     UseIdentityMatrix(true);
  465.     CreateFramesTable(20, m_AnimFramesQty);
  466.  
  467.     m_BaseColor   = color(1.0, 1.0, 1.0, 1.0);
  468.     m_SizeFactor  = 5.0;
  469.     m_SmokeHeight = rand(30.0, 40.0);
  470.  
  471.     GenerateSmokeTable(0, 10);
  472.     GenerateFireTable(10, 20);
  473.  
  474.     for (float Time = 0.0; Time < 50.0; Time = Time + 1.0)
  475.     {
  476.       AddReference(rand_int(10), Time / 75.0, 0.25);
  477.       AddReference(10 + rand_int(10), Time / 75.0, 0.05);
  478.     }
  479.   }
  480. }
  481.  
  482. class CFireBallExplosionEffect
  483.   extends CFramesTableCreator
  484. {
  485.   final static string CID = "SampledEffect";
  486.  
  487.   void CFireBallExplosionEffect()
  488.   {
  489.     int SmokeQuantity = 1 + rand_int(1);
  490.     int PatternsQty   = 3;
  491.  
  492.     SetEffectDuration(10.0);
  493.     UseIdentityMatrix(true);
  494.     CreateFramesTable(SmokeQuantity * PatternsQty * 2 + 1, m_AnimFramesQty);
  495.  
  496.     m_BaseColor   = color(1.0, 1.0, 1.0, 1.0);
  497.     m_SizeFactor  = 2.0;
  498.  
  499.     for (int Smoke = 0; Smoke < SmokeQuantity; Smoke = Smoke + 1)
  500.     {
  501.       m_BasePlace   = vector(rand(5.0), rand(5.0), 0.0);
  502.       m_SmokeHeight = rand(10.0, 20.0);
  503.  
  504.       GenerateSmokeTable(Smoke * PatternsQty * 2, Smoke * PatternsQty * 2 + PatternsQty);
  505.       GenerateFireTable(Smoke * PatternsQty * 2 + PatternsQty, Smoke * PatternsQty * 2 + PatternsQty * 2);
  506.  
  507.       for (float Time = 0.0; Time < 7.5; Time = Time + 1.0)
  508.       {
  509.         AddReference(Smoke * PatternsQty * 2 + rand_int(PatternsQty), Time / 20.0, 0.5);
  510.         AddReference(Smoke * PatternsQty * 2 + PatternsQty + rand_int(PatternsQty), Time / 20.0, 0.2);
  511.       }
  512.     }
  513.  
  514.     m_SizeFactor = 2.0;
  515.     GenerateParticleAnimation(SmokeQuantity * PatternsQty * 2, 0,
  516.       vector(0.0, 0.0, 1.0), vector(0.0, 0.0, 2.0),
  517.       vector(9.0, 9.0, 2.0), vector(15.0, 15.0, 4.0), 400, 1.0);
  518.     AddReference(SmokeQuantity * PatternsQty * 2, 0.0, 0.1);
  519.   }
  520. }
  521.  
  522. class CSmallBarrelExplosionEffect
  523.   extends CSingleParticleAnimator
  524. {
  525.   final static string CID = "DynamicEffect";
  526.  
  527.   void CSmallBarrelExplosionEffect()
  528.   {
  529.     SetEffectDuration(5.0);
  530.     UseIdentityMatrix(true);
  531.     CreateFramesTable(2, m_AnimFramesQty * 4 + 32);
  532.  
  533.     m_SizeFactor = 2.0;
  534.     GenerateParticleAnimation(0,  0, vector(0.0, 0.0, 0.5), vector(0.0, 0.0, 5.0), vector(0.5, 0.5, 2.0), vector(4.0, 4.0, 4.0), 400, 2.0);
  535.     GenerateParticleAnimation(1, 32, vector(0.0, 0.0, 3.0), vector(0.0, 0.0, 5.0), vector(6.0, 6.0, 6.0), 300, 4.0);
  536.   }
  537. }
  538.  
  539. class CCisternExplosionEffect
  540.   extends CSingleParticleAnimator
  541. {
  542.   final static string CID = "DynamicEffect";
  543.  
  544.   void CCisternExplosionEffect()
  545.   {
  546.     SetEffectDuration(5.0);
  547.     UseIdentityMatrix(true);
  548.     CreateFramesTable(4, m_AnimFramesQty * 6 + 64);
  549.  
  550.     m_SizeFactor = 12.0;
  551.     GenerateParticleAnimation(0,  0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(2.0, 2.0, 2.0), vector(20.0, 20.0, 4.0), 200, 2.0);
  552.     GenerateParticleAnimation(1, 32, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 3.0), vector(1.0, 1.0, 6.0), vector(6.0,  6.0,  6.0), 400, 3.0);
  553.     GenerateParticleAnimation(2, 48, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 5.0), vector(6.0, 6.0, 6.0), vector(10.0, 10.0, 10.0), 300, 6.0);
  554.     GenerateParticleAnimation(3, 64, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 5.0), vector(6.0, 6.0, 6.0), vector(10.0, 10.0, 10.0), 300, 6.0);
  555.   }
  556. }
  557.  
  558. class CHelicopterExplosionEffect
  559.   extends CSingleParticleAnimator
  560. {
  561.   final static string CID = "DynamicEffect";
  562.  
  563.   void CHelicopterExplosionEffect()
  564.   {
  565.     SetEffectDuration(4.0);
  566.     UseIdentityMatrix(true);
  567.     CreateFramesTable(4, m_AnimFramesQty * 6 + 64);
  568.  
  569.     m_SizeFactor = 6.0;
  570.     GenerateParticleAnimation(0,  0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(2.0, 2.0, 2.0), vector(20.0, 20.0, 4.0), 200, 2.0);
  571.     GenerateParticleAnimation(1, 32, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 3.0), vector(1.0, 1.0, 6.0), vector(6.0,  6.0,  4.0), 400, 3.0);
  572.     GenerateParticleAnimation(2, 48, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 5.0), vector(6.0, 6.0, 6.0), vector(10.0, 10.0, 10.0), 300, 6.0);
  573.     GenerateParticleAnimation(3, 64, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 5.0), vector(6.0, 6.0, 6.0), vector(10.0, 10.0, 10.0), 300, 6.0);
  574.   }
  575. }
  576.  
  577. class CAmmoBoxExplosionEffect
  578.   extends CSingleParticleAnimator
  579. {
  580.   final static string CID = "DynamicEffect";
  581.  
  582.   void CAmmoBoxExplosionEffect()
  583.   {
  584.     SetEffectDuration(5.0);
  585.     UseIdentityMatrix(true);
  586.     CreateFramesTable(2, m_AnimFramesQty * 4 + 32);
  587.  
  588.     m_SizeFactor = 8.0;
  589.     GenerateParticleAnimation(0,  0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(4.0, 4.0, 4.0), vector(6.0, 6.0, 6.0), 200, 1.0);
  590.     m_BaseColor  = color(1.0, 0.8, 0.5, 0.7);
  591.     GenerateParticleAnimation(1, 32, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 2.0), vector(6.0, 6.0, 6.0), 500, 4.0);
  592.   }
  593. }
  594.  
  595. class CHangarExplosionEffect
  596.   extends CSingleParticleAnimator
  597. {
  598.   final static string CID = "DynamicEffect";
  599.  
  600.   void CHangarExplosionEffect()
  601.   {
  602.     SetEffectDuration(5.0);
  603.     UseIdentityMatrix(true);
  604.     CreateFramesTable(2, m_AnimFramesQty * 2 + 64);
  605.  
  606.     m_SizeFactor = 14.0;
  607.     GenerateParticleAnimation(0,  0, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(2.0, 2.0, 2.0), vector(20.0, 20.0, 4.0), 200, 2.0);
  608.     GenerateParticleAnimation(1, 64, vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0), vector(9.0, 9.0, 2.0), vector(30.0, 30.0, 6.0), 400, 2.0);
  609.   }
  610. }
  611.  
  612.  
  613.  
  614. // gun fire effects
  615. class CGunFireTriple
  616. {
  617.   color m_DirectColor = color(1.0, 1.0, 1.0, 0.0);
  618.   color m_SideColor   = color(1.0, 0.9, 0.5, 0.0);
  619.  
  620.   float m_ColorPower  = 5.0;
  621.   float m_GeomPower   = 0.5;
  622.  
  623.   float m_SizeFactor  = 1.0;
  624.  
  625.   void GenerateGunFireTriple(
  626.       int _StartParticle,
  627.       int _StartFrame,
  628.       int _FinaleFrame
  629.     )
  630.   {
  631.     final int FramesQty = _FinaleFrame - _StartFrame;
  632.  
  633.     for (int FrameNum = 0; FrameNum < FramesQty; FrameNum = FrameNum + 1)
  634.     {
  635.       float Phase  = float(FrameNum) / float(FramesQty - 1);
  636.       float GeometryPhase = pow(Phase, m_GeomPower);
  637.  
  638.       SetPosition(_StartParticle + 0, _StartFrame + FrameNum,
  639.         vector(0.9, 0.0, 0.0) * pow(Phase, m_GeomPower) * m_SizeFactor);
  640.       SetSizeFactor(_StartParticle + 0, _StartFrame + FrameNum,
  641.         vector(0.9, 0.3, 0.3) * pow(Phase, m_GeomPower) * m_SizeFactor);
  642.       SetColor(_StartParticle + 0, _StartFrame + FrameNum,
  643.         m_DirectColor + color(0.0, 0.0, 0.0, 1.0 - pow(Phase, m_ColorPower)));
  644.  
  645.       SetSizeFactor(_StartParticle + 1, _StartFrame + FrameNum,
  646.         vector(0.2, 0.2, 0.6) * pow(Phase, m_GeomPower) * m_SizeFactor);
  647.       SetColor(_StartParticle + 1, _StartFrame + FrameNum,
  648.         m_SideColor + color(0.0, 0.0, 0.0, 1.0 - pow(Phase, m_ColorPower)));
  649.  
  650.       SetSizeFactor(_StartParticle + 2, _StartFrame + FrameNum,
  651.         vector(0.2, 0.6, 0.2) * pow(Phase, m_GeomPower) * m_SizeFactor);
  652.       SetColor(_StartParticle + 2, _StartFrame + FrameNum,
  653.         m_SideColor + color(0.0, 0.0, 0.0, 1.0 - pow(Phase, m_ColorPower)));
  654.     }
  655.  
  656.     // main plane
  657.     SetPattern(_StartParticle + 0, EPPID_BILLBOARD_XAXIS);
  658.     SetMaterial(_StartParticle + 0, 3);
  659.  
  660.     // side planes
  661.     SetPattern(_StartParticle + 1, EPPID_BILLBOARD_ZAXIS);
  662.     SetMaterial(_StartParticle + 1, 1);
  663.     SetPosition(_StartParticle + 1, vector(-0.1, 0.0, 0.0) * m_SizeFactor);
  664.  
  665.     SetPattern(_StartParticle + 2, EPPID_BILLBOARD_YAXIS);
  666.     SetMaterial(_StartParticle + 2, 1);
  667.     SetPosition(_StartParticle + 2, vector(-0.1, 0.0, 0.0) * m_SizeFactor);
  668.   }
  669. }
  670.  
  671. class CMachineGunFireEffect
  672.   extends CGunFireTriple
  673. {
  674.   final static string CID = "DynamicEffect";
  675.  
  676.   void CMachineGunFireEffect()
  677.   {
  678.     SetEffectDuration(0.2);
  679.     CreateFramesTable(3, 15);
  680.  
  681.     GenerateGunFireTriple(0, 0, 14);
  682.   }
  683. }
  684.  
  685. class CBigGunFireEffect
  686.   extends CGunFireTriple
  687. {
  688.   final static string CID = "DynamicEffect";
  689.  
  690.   void CBigGunFireEffect()
  691.   {
  692.     SetEffectDuration(0.2);
  693.     CreateFramesTable(3, 16);
  694.  
  695.     m_SizeFactor = 4.0;
  696.     GenerateGunFireTriple(0, 0, 16);
  697.   }
  698. }
  699.  
  700. class CBigGunFireCloudEffect
  701.   extends CSingleParticleAnimator
  702. {
  703.   final static string CID = "DynamicEffect";
  704.  
  705.   void CBigGunFireCloudEffect()
  706.   {
  707.     SetEffectDuration(2.0);
  708.     CreateFramesTable(2, m_AnimFramesQty * 4 + 32);
  709.  
  710.     m_SizeFactor = 2.0;
  711.     m_BaseColor  = color(1.0, 1.0, 1.0, 1.0);
  712.     GenerateParticleAnimation(0,  8, vector(0.0, 0.0, 0.0), vector(1.0, 0.0, 0.0), vector(1.0, 0.1, 0.1), vector(1.0, 1.0, 1.0), 400, 1.0);
  713.     m_BaseColor  = color(1.0, 1.0, 1.0, 0.3);
  714.     GenerateParticleAnimation(1, 32, vector(0.5, 0.0, 0.0), vector(4.0, 0.0, 0.0), vector(1.0, 1.0, 1.0), vector(2.0, 2.0, 2.0), 500, 4.0);
  715.   }
  716. }
  717.  
  718. class CPanzerFaustFireEffect
  719.   extends CSingleParticleAnimator
  720. {
  721.   final static string CID = "DynamicEffect";
  722.  
  723.   void CPanzerFaustFireEffect()
  724.   {
  725.     SetEffectDuration(1.5);
  726.     CreateFramesTable(1, m_AnimFramesQty * 4);
  727.  
  728.     m_SizeFactor = 2.0;
  729.     m_BaseColor  = color(1.0, 1.0, 1.0, 0.5);
  730.     GenerateParticleAnimation(0, 0,
  731.       vector(0.0, 0.0, 1.0), vector(0.0, 0.0, rand(3.0, 4.0)),
  732.       vector(4.0, 4.0, 4.0), vector(4.0, 4.0, 4.0), 500, 4.0);
  733.   }
  734. }
  735.  
  736. class CRocketFireCloudEffect
  737.   extends CSingleParticleAnimator
  738. {
  739.   final static string CID = "DynamicEffect";
  740.  
  741.   void CRocketFireCloudEffect()
  742.   {
  743.     SetEffectDuration(1.5);
  744.     CreateFramesTable(1, m_AnimFramesQty * 4);
  745.  
  746.     m_SizeFactor = 2.0;
  747.     m_BaseColor  = color(1.0, 1.0, 1.0, 0.5);
  748.     GenerateParticleAnimation(0, 0,
  749.       vector(0.0, 0.0, 0.0), vector(rand(-5.0, -4.0), rand(1.0), rand(2.0, 3.0)),
  750.       vector(4.0, 4.0, 4.0), vector(4.0, 4.0, 4.0), 500, 4.0);
  751.   }
  752. }
  753.  
  754.  
  755.  
  756.  
  757. // Inverse track effects
  758. class CMissileInverseTrackEffect
  759.   extends CSingleParticleAnimator
  760. {
  761.   final static string CID = "DynamicEffect";
  762.  
  763.   void CMissileInverseTrackEffect()
  764.   {
  765.     SetEffectDuration(2.0);
  766.     CreateFramesTable(1, m_AnimFramesQty * 10);
  767.  
  768.     m_PlacePower = 1.0;
  769.     m_SizePower  = 0.3;
  770.  
  771.     m_BaseColor  = color(1.0, 1.0, 1.0, 0.8);
  772.     GenerateParticleAnimation(
  773.       0, 0,
  774.       vector(-1.0, 0.0, 0.0), vector(-1.0, 0.0, 0.0),
  775.       vector(15.0, 2.0, 2.0), vector(15.0, 0.5, 0.5),
  776.       400, 1.0);
  777.  
  778.     m_BaseColor  = color(1.0, 1.0, 1.0, 0.3);
  779.     GenerateParticleAnimation(
  780.       0, m_AnimFramesQty,
  781.       vector(1.0, 0.0, 0.0), vector(1.0, 0.0, 0.0) + vector(0.0, rand(2.5), rand(2.5)),
  782.       vector(9.0, 5.0, 5.0),
  783.       500, 9.0);
  784.  
  785.     SetAlphaSpace(0, vector(0.3, 1.0, 1.0));
  786.     SetAlphaSpace(0, 0, m_AnimFramesQty, vector(1.0, 1.0, 1.0));
  787.   }
  788. }
  789.  
  790. class CRocketInverseTrackEffect
  791.   extends CSingleParticleAnimator
  792. {
  793.   final static string CID = "DynamicEffect";
  794.  
  795.   void CRocketInverseTrackEffect()
  796.   {
  797.     SetEffectDuration(0.2);
  798.     CreateFramesTable(1, m_AnimFramesQty);
  799.  
  800.     m_PlacePower = 1.0;
  801.     m_SizePower  = 0.3;
  802.  
  803.     m_BaseColor = color(1.0, 1.0, 1.0, 0.8);
  804.     GenerateParticleAnimation(
  805.       0, 0,
  806.       vector(-0.5, 0.0, 0.0), vector(-0.5, 0.0, 0.0),
  807.       vector(6.0, 2.0, 2.0), vector(6.0, 0.2, 0.2),
  808.       400, 1.0);
  809.   }
  810. }
  811.  
  812. class CFireBallInverseTrackEffect
  813.   extends CSingleParticleAnimator
  814. {
  815.   final static string CID = "DynamicEffect";
  816.  
  817.   void CFireBallInverseTrackEffect()
  818.   {
  819.     SetEffectDuration(0.5);
  820.     CreateFramesTable(1, m_AnimFramesQty);
  821.  
  822.     m_PlacePower = 1.0;
  823.     m_SizePower  = 1.0;
  824.     m_SizeFactor = 1.0;
  825.  
  826.     m_BaseColor = color(1.0, 1.0, 1.0, 0.5);
  827.     GenerateParticleAnimation(
  828.       0, 0,
  829.       vector(0.0, 0.0, 0.0), vector(0.0, rand(2.5), rand(2.5)),
  830.       vector(6.0, 6.0, 6.0), vector(6.0, 1.0, 1.0),
  831.       400, 1.0);
  832.   }
  833. }
  834.  
  835. class CBlackFireBallInverseTrackEffect
  836.   extends CSingleParticleAnimator
  837. {
  838.   final static string CID = "DynamicEffect";
  839.  
  840.   void CBlackFireBallInverseTrackEffect()
  841.   {
  842.     SetEffectDuration(1.5);
  843.     CreateFramesTable(1, m_AnimFramesQty * 5);
  844.  
  845.     m_PlacePower = 1.0;
  846.     m_SizePower  = 1.0;
  847.     m_SizeFactor = 1.0;
  848.  
  849.     m_BaseColor = color(1.0, 1.0, 1.0, 0.5);
  850.     GenerateParticleAnimation(
  851.       0, 0,
  852.       vector(0.0, 0.0, 0.0), vector(0.0, rand(2.5), rand(2.5)),
  853.       vector(6.0, 6.0, 6.0), vector(3.0, 3.0, 3.0),
  854.       400, 1.0);
  855.  
  856.     m_BaseColor = color(1.0, 1.0, 1.0, 1.0);
  857.     GenerateParticleAnimation(
  858.       0, m_AnimFramesQty,
  859.       vector(3.0, 0.0, 0.0), vector(3.0, rand(6.0), rand(6.0)),
  860.       vector(8.0, 8.0, 8.0),
  861.       300, 4.0);
  862.   }
  863. }
  864.  
  865. class CSplashInverseTrackEffect
  866.   extends CSingleParticleAnimator
  867. {
  868.   final static string CID = "DynamicEffect";
  869.  
  870.   void CSplashInverseTrackEffect()
  871.   {
  872.     SetEffectDuration(1.0);
  873.     CreateFramesTable(1, m_AnimFramesQty);
  874.  
  875.     m_PlacePower = 1.0;
  876.     m_SizePower  = 1.0;
  877.     m_SizeFactor = 1.0;
  878.  
  879.     m_BaseColor = color(1.0, 1.0, 1.0, 0.5);
  880.     GenerateParticleAnimation(
  881.       0, 0,
  882.       vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 0.0),
  883.       vector(5.0, 3.0, 3.0), vector(5.0, 0.2, 0.2),
  884.       400, 1.0);
  885.   }
  886. }
  887.  
  888. class CPanzerFaustInverseTrackEffect
  889.   extends CSingleParticleAnimator
  890. {
  891.   final static string CID = "DynamicEffect";
  892.  
  893.   void CPanzerFaustInverseTrackEffect()
  894.   {
  895.     SetEffectDuration(1.5);
  896.     CreateFramesTable(1, m_AnimFramesQty);
  897.  
  898.     m_PlacePower = 1.0;
  899.     m_SizePower  = 0.3;
  900.  
  901.     m_BaseColor  = color(1.0, 1.0, 1.0, 0.3);
  902.     GenerateParticleAnimation(
  903.       0, 0,
  904.       vector(-1.0, 0.0, 0.0), vector(-1.0, rand(3.0), rand(3.0)),
  905.       vector(4.0, 0.5, 0.5), vector(4.0, 4.0, 4.0),
  906.       500, 1.0);
  907.  
  908.     SetAlphaSpace(0, vector(0.5, 1.0, 1.0));
  909.   }
  910. }
  911.  
  912.  
  913.  
  914.  
  915. // Dust effects
  916. class CDustEffect
  917.   extends CSingleParticleAnimator
  918. {
  919.   final static string CID = "DynamicEffect";
  920.  
  921.   void CDustEffect()
  922.   {
  923.     SetEffectDuration(2.0);
  924.     CreateFramesTable(2, m_AnimFramesQty);
  925.  
  926.     m_PlacePower = 0.5;
  927.     m_BaseColor  = color(95.0 / 256.0, 92.0 / 256.0, 73.0 / 256.0, 0.3);
  928.  
  929.     for (int ParticleNum = 0; ParticleNum < 2; ParticleNum = ParticleNum + 1)
  930.     {
  931.       GenerateParticleAnimation(
  932.         ParticleNum, 0,
  933.         vector(0.0, 0.0, 0.0), vector(rand(0.1), rand(4.0), rand(0.0, 4.0)),
  934.         vector(4.0, 4.0, 4.0), 500, 1.0);
  935.       SetAlphaSpace(ParticleNum, vector(0.3, 0.5, 0.5));
  936.     }
  937.   }
  938. }
  939.  
  940. class CBulletHitGroundEffect
  941.   extends CSingleParticleAnimator
  942. {
  943.   final static string CID = "DynamicEffect";
  944.  
  945.   void CBulletHitGroundEffect()
  946.   {
  947.     SetEffectDuration(3.0);
  948.     CreateFramesTable(1, m_AnimFramesQty);
  949.  
  950.     m_PlacePower = 0.5;
  951.     m_SizePower  = 0.5;
  952.     m_BaseColor  = color(1.0, 0.9, 0.6, 0.25);
  953.  
  954.     GenerateParticleAnimation(
  955.       0, 0,
  956.       vector(0.0, 0.0, 0.0), vector(0.0, 0.0, 6.0),
  957.       vector(1.0, 1.0, 2.0), vector(6.0, 6.0, 6.0),
  958.       500, 1.0);
  959.   }
  960. }
  961.  
  962. class CBulletHitObjectEffect
  963. {
  964.   final static string CID = "DynamicEffect";
  965.  
  966.   void CBulletHitObjectEffect()
  967.   {
  968.     SetEffectDuration(0.2);
  969.     CreateFramesTable(1, 3);
  970.  
  971.     SetPattern(0, EPPID_BILLBOARD_PLANE);
  972.     SetMaterial(0, 6);
  973.     SetPosition(0, vector(0.0, 0.0, 0.0));
  974.  
  975.     SetColor(0, 0, color(1.0, 1.0, 1.0, 1.0));
  976.     SetColor(0, 1, color(1.0, 1.0, 1.0, 1.0));
  977.     SetColor(0, 2, color(1.0, 1.0, 1.0, 0.0));
  978.  
  979.     SetSizeFactor(0, 0, vector(0.1, 0.1, 0.1));
  980.     SetSizeFactor(0, 1, vector(1.0, 1.0, 1.0));
  981.     SetSizeFactor(0, 2, vector(1.0, 1.0, 1.0));
  982.   }
  983. }
  984.  
  985. class CSplashBulletTraceEffect
  986. {
  987.   final static string CID = "StaticEffect";
  988.  
  989.   void CSplashBulletTraceEffect()
  990.   {
  991.     CreateParticle(
  992.         EPPID_BILLBOARD_XAXIS,
  993.         vector(0.0, 0.0, 0.0),
  994.         vector(0.3, 0.15, 0.15),
  995.         0,
  996.         color(1.0, 0.9, 0.6, 1.0),
  997.         vector(1.0, 1.0, 1.0)
  998.       );
  999.   }
  1000. }
  1001.  
  1002. class CHelicopterSmokeTrackEffect
  1003.   extends CSingleParticleAnimator
  1004. {
  1005.   final static string CID = "DynamicEffect";
  1006.  
  1007.   void CHelicopterSmokeTrackEffect()
  1008.   {
  1009.     SetEffectDuration(5.0);
  1010.     CreateFramesTable(1, m_AnimFramesQty * 5);
  1011.  
  1012.     m_PlacePower = 1.0;
  1013.     m_SizePower  = 1.0;
  1014.     m_SizeFactor = 1.5;
  1015.  
  1016.     m_BaseColor = color(1.0, 1.0, 1.0, 0.5);
  1017.     GenerateParticleAnimation(
  1018.       0, 0,
  1019.       vector(0.0, 0.0, 0.0), vector(0.0, rand(2.5), rand(2.5)),
  1020.       vector(6.0, 6.0, 6.0), vector(3.0, 3.0, 3.0),
  1021.       400, 1.0);
  1022.  
  1023.     m_BaseColor = color(1.0, 1.0, 1.0, 1.0);
  1024.     GenerateParticleAnimation(
  1025.       0, m_AnimFramesQty,
  1026.       vector(3.0, 0.0, 0.0), vector(3.0, rand(6.0), rand(6.0)),
  1027.       vector(8.0, 8.0, 8.0),
  1028.       300, 4.0);
  1029.   }
  1030. }
  1031.  
  1032.  
  1033.  
  1034.  
  1035. // #TMP tasks to change
  1036. class CTimeJumpSplashRingEffect
  1037. {
  1038.   final static string CID = "DynamicEffect";
  1039.  
  1040.   void CTimeJumpSplashRingEffect()
  1041.   {
  1042.     SetEffectDuration(1.0);
  1043.     CreateFramesTable(1, 2);
  1044.  
  1045.     SetPattern(0, EPPID_STATIC_PLANE_XY);
  1046.     SetMaterial(0, 1);
  1047.     SetPosition(0, vector(0.0, 0.0, 0.0));
  1048.  
  1049.     SetSizeFactor(0, 0, vector(0.1, 0.1, 0.1));
  1050.     SetSizeFactor(0, 1, vector(100.0, 100.0, 100.0));
  1051.  
  1052.     SetColor(0, 0, color(0.5, 0.0, 1.0, 1.0));
  1053.     SetColor(0, 1, color(0.5, 0.0, 1.0, 0.0));
  1054.   }
  1055. }
  1056.  
  1057. class CTimeJumpEffect
  1058. {
  1059.   final static string CID = "DynamicEffect";
  1060.  
  1061.   void CTimeJumpEffect()
  1062.   {
  1063.     SetEffectDuration(15.0);
  1064.     CreateFramesTable(2, 4);
  1065.  
  1066.     vector WindowSize = vector(10.0, 10.0, 10.0);
  1067.     vector FlashSize  = vector(25.0, 25.0, 25.0);
  1068.  
  1069.     // pattern 0
  1070.     SetPattern(0, EPPID_STATIC_PLANE_YZ);
  1071.     SetMaterial(0, 1);
  1072.     SetPosition(0, vector(0.0, 0.0, 0.0));
  1073.  
  1074.     SetSizeFactor(0, 0,    vector(0.1, 0.1, 0.1));
  1075.     SetSizeFactor(0, 1, 4, FlashSize);
  1076.  
  1077.     SetColor(0, 0, 3, color(0.5, 0.0, 1.0, 1.0));
  1078.     SetColor(0,    3, color(0.5, 0.0, 1.0, 0.0));
  1079.  
  1080.     // pattern 1
  1081.     SetPattern(1, EPPID_STATIC_PLANE_YZ);
  1082.     SetMaterial(1, 2);
  1083.     SetPosition(1, vector(0.0, 0.0, 0.0));
  1084.  
  1085.     SetSizeFactor(1, 0,    vector(0.1, 0.1, 0.1));
  1086.     SetSizeFactor(1, 1, 4, WindowSize);
  1087.  
  1088.     SetColor(1, 0, 3, color(1.0, 1.0, 1.0, 1.0));
  1089.     SetColor(1,    3, color(1.0, 1.0, 1.0, 0.0));
  1090.   }
  1091. }
  1092.  
  1093.  
  1094.  
  1095.  
  1096. class CEffectsArray
  1097. {
  1098.   void CEffectsArray()
  1099.   {
  1100.     // Load effects materials
  1101.     LoadMaterials("Common/effects");
  1102.  
  1103.     // Create effects patterns
  1104.     CreatePattern("CTimeJumpEffect", "EFFECTID_TimeJumpEffect");
  1105.     CreatePattern("CTimeJumpSplashRingEffect", "EFFECTID_TimeJumpSplashRingEffect");
  1106.  
  1107.     CreatePattern("CTankGunBulletHitEffect", "EFFECTID_TankGunBulletHitEffect");
  1108.     CreatePattern("CFlakGunBulletHitEffect", "EFFECTID_FlakGunBulletHitEffect");
  1109.  
  1110.     CreatePattern("CHelicopterSmokeEffect", "EFFECTID_HelicopterSmokeEffect");
  1111.     CreatePattern("CMissileExplosionEffect", "EFFECTID_MissileExplosionEffect");
  1112.     CreatePattern("CKatushaRocketExplosionEffect", "EFFECTID_KatushaRocketExplosionEffect");
  1113.     CreatePattern("CSmallBarrelExplosionEffect", "EFFECTID_SmallBarrelExplosionEffect");
  1114.     CreatePattern("CCisternExplosionEffect", "EFFECTID_CisternExplosionEffect");
  1115.     CreatePattern("CAmmoBoxExplosionEffect", "EFFECTID_AmmoBoxExplosionEffect");
  1116.     CreatePattern("CHangarExplosionEffect", "EFFECTID_HangarExplosionEffect");
  1117.     CreatePattern("CAirBombExplosionEffect", "EFFECTID_AirBombExplosionEffect");
  1118.     CreatePattern("CUnitExplosionEffect", "EFFECTID_UnitExplosionEffect", 3);
  1119.     CreatePattern("CItemExplosionEffect", "EFFECTID_ItemExplosionEffect", 3);
  1120.     CreatePattern("CTreeExplosionEffect", "EFFECTID_TreeExplosionEffect", 3);
  1121.     CreatePattern("CBuildingExplosionEffect", "EFFECTID_BuildingExplosionEffect", 3);
  1122.  
  1123.     CreatePattern("CMachineGunFireEffect", "EFFECTID_HelicopterGunFireEffect");
  1124.     CreatePattern("CMachineGunFireEffect", "EFFECTID_AntiairGunFireEffect");
  1125.     CreatePattern("CMachineGunFireEffect", "EFFECTID_GunTowerGunFireEffect");
  1126.  
  1127.     CreatePattern("CBigGunFireEffect", "EFFECTID_TankGunFireEffect");
  1128.     CreatePattern("CBigGunFireCloudEffect", "EFFECTID_TankGunFireCloudEffect");
  1129.  
  1130.     CreatePattern("CBigGunFireEffect", "EFFECTID_FlakGunFireEffect");
  1131.     CreatePattern("CBigGunFireCloudEffect", "EFFECTID_FlakGunFireCloudEffect");
  1132.     CreatePattern("CBigGunFireEffect", "EFFECTID_MobileFlakGunFireEffect");
  1133.     CreatePattern("CBigGunFireCloudEffect", "EFFECTID_MobileFlakGunFireCloudEffect");
  1134.  
  1135.     CreatePattern("CMachineGunFireEffect", "EFFECTID_AJeepGunFireEffect");
  1136.     CreatePattern("CMachineGunFireEffect", "EFFECTID_ArmedSandBagsGunFireEffect");
  1137.  
  1138.     CreatePattern("CPanzerFaustFireEffect", "EFFECTID_PanzerFaustFireEffect");
  1139.     CreatePattern("CPanzerFaustExplosionEffect", "EFFECTID_PanzerFaustExplosionEffect");
  1140.     CreatePattern("CPanzerFaustInverseTrackEffect", "EFFECTID_PanzerFaustInverseTrackEffect", 5);
  1141.  
  1142.     CreatePattern("CMissileInverseTrackEffect", "EFFECTID_MissileInverseTrack", 5);
  1143.     CreatePattern("CRocketInverseTrackEffect", "EFFECTID_RocketInverseTrack", 5);
  1144.  
  1145.     CreatePattern("CDustEffect", "EFFECTID_DustEffect", 5);
  1146.     CreatePattern("CHelicopterSmokeTrackEffect", "EFFECTID_HelicopterSmokeTrackEffect", 5);
  1147.  
  1148.     CreatePattern("CRocketFireCloudEffect", "EFFECTID_HelicopterRocketFireCloudEffect");
  1149.     CreatePattern("CRocketFireCloudEffect", "EFFECTID_KatushaRocketFireCloudEffect");
  1150.  
  1151.     CreatePattern("CFireBallExplosionEffect", "EFFECTID_FireBallExplosionEffect", 5);
  1152.     CreatePattern("CBlackFireBallInverseTrackEffect", "EFFECTID_BlackFireBallInverseTrack", 5);
  1153.     CreatePattern("CFireBallInverseTrackEffect", "EFFECTID_FireBallInverseTrack", 5);
  1154.     CreatePattern("CSplashInverseTrackEffect", "EFFECTID_BlackFireSplashInverseTrack", 5);
  1155.  
  1156.     CreatePattern("CBulletHitObjectEffect", "EFFECTID_BulletHitObjectEffect", 5);
  1157.     CreatePattern("CBulletHitGroundEffect", "EFFECTID_BulletHitGroundEffect", 5);
  1158.  
  1159.     CreatePattern("CHelicopterExplosionEffect", "EFFECTID_HelicopterExplosionEffect");
  1160.   }
  1161. }
  1162.  
  1163.